Over its more-than-20 year history, software developers have written scores of applications in the Java object-oriented programming language. (A major implementation of Java is commercially available from Oracle Corporation of Redwood City, Calif.) Java was developed with a “write once, run anywhere” philosophy, meaning that its primary advantage is cross-platform compatibility. Accordingly, Java is designed to execute on a virtual machine, a Java Virtual Machine, or “JVM,” to be exact. While various central processing units (CPUs) host JVM implementations written specifically for them, the JVMs themselves are designed to present the same virtual computing environment to applications written in Java (“Javacode”). Java bytecode is called “bytecode.”
Nvidia Corporation of Santa Clara, Calif., has developed a Java library, called “Java on GPU,” or JoG. JoG introduces new Java classes that allow developers to accelerate the execution of Java applications on computer systems having a GPU in addition to the CPU that hosts the JVM. The GPU serves as a device relative to the host CPU. Software development tools that incorporate JoG allow automatic GPU acceleration of Java bytecode without too much special effort on the developer's part: after the JoG library is incorporated, the developer only needs to make minor changes to the Java source code to enable the automatic GPU acceleration. JoG and the tools designed to incorporate it bring to Java the remarkable processing power GPUs can provide, assuming their power is properly used.
In Java, a lambda function, sometimes simply called a “lambda,” is a functional interface that returns a value for specific formal input parameters. Following is a declaration of a lambda function that serves as an example:lambda_add1=(x)→x+1.
Lambda_add1 is a lambda function that returns a value that is “x” incremented by one. In this example, “x” is a formal parameter.
However, lambda functions can also use variables that do not appear as formal parameters. Following is a declaration of a lambda function that uses a variable that does not appear as a formal parameter:lambda_saxpy=(x,y)→scalar*x+y. 
Lambda_saxpy is a lambda function that returns a value that is “scalar” multiplied by “x” and then added to “y.” In this example, “x” and “y” are formal parameters, but “scalar” is not. “Scalar” is instead a captured local variable. A captured local variable is so-called, because its value is captured when the lambda function is declared and stored as part of the lambda function. For this reason, a lambda function that employs one or more captured local variables is not completely defined until it is given its body (code) and the values of all of its captured local variables.